package com.neudeu.zy;

public class TestCompany {
    public static void main(String[] args) {
        //定义员工数组
        ColaEmployee[] arrEmps=new ColaEmployee[3];
        //创建员工加入数组
        //此处使用了多态：使用父类类型指向子类

        /*
           = 左边的类型是父类类型 ColaEmployee
           = 右边new创建的实例对象是父类ColaEmployee的子类的实例对象
        */

        arrEmps[0]=new SalariedEmployee("张三",3,15000);
        arrEmps[1]=new HourlyEmployee("李四",2,70,200);
        arrEmps[2]=new SalesEmployee("王五",5,300000,0.03);

        //打印员工2月份工资
        //创建Company类的一个实例对象
        Company company=new Company();
        //设置打印的月份
        company.setCalculateMonth(2);
        //遍历员工列表，打印2月份的工资
        for (int i = 0; i <arrEmps.length ; i++) {
            //设置打印员工工资类的属性

            company.setColaEmployee(arrEmps[i]);//打印的员工
            //打印员工工资
            company.printEmployeeSalary();

        }

        System.out.println("------------以下是Company2的结果-----------------");

        //打印员工2月份工资
        //创建Company2类的一个实例对象
        Company2 company2=new Company2();

        //遍历员工列表，打印2月份的工资
        for (int i = 0; i <arrEmps.length ; i++) {

            //打印员工工资
            company2.printEmployeeSalary(2,arrEmps[i]);

        }

        System.out.println("--------打印单独的某个员工工资----------------------");

        //新建一个员工对象
        SalesEmployee seZhaoliu=new SalesEmployee("赵六",9,400000,0.03);
        //打印该员工的信息
        //此处使用了多态：使用父类类型指向子类

        /*
           printEmployeeSalary 方法调用时传递的参数（形参)是子类类型
           printEmployeeSalary 方法的实参是父类类型
           在方法调用时，将子类类型的参数（形参）的值
                传递给了父类类型的方法定义的参数（实参）
        */

        company2.printEmployeeSalary(2,seZhaoliu);


    }
}
